package com.zgh.interceptor;//package com.zgh.interceptor;
//
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
//
//import org.apache.commons.lang3.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.kisso.security.token.SSOToken;
//import com.xxg.base.module.Operater;
//import com.xxg.exception.BaseException;
//import com.xxg.filter.FilterHelper;
//import com.xxg.util.SystemConstant;
//import com.xxg.util.SystemProperty;
//import com.zgh.cache.CacheConstant;
//import com.zgh.cache.RedisCache;
//import com.zgh.common.controller.BaseController;
//import com.zgh.power.service.IEditLockService;
//import com.zgh.rbac.module.Menu;
//import com.zgh.rbac.service.RbacProxy;
//import com.zgh.usercenter.module.Organization;
//import com.zgh.usercenter.module.User;
//import com.zgh.usercenter.service.IUserCenterService;
//import com.zgh.usercenter.service.UserCenterProxy;
//import com.zgh.util.SmsClient;
//
//@Controller
//public class LoginController extends BaseController {
//	private static final Logger logger=LoggerFactory.getLogger(LoginController.class);
//	@Autowired
//	private RedisCache redisCache;
//	@Autowired
//	private UserCenterProxy userCenterProxy;
//	@Autowired
//	private IUserCenterService userCenterService;
//	@Autowired
//	private RbacProxy rbacProxy;
//	@Autowired
//	private IEditLockService editLockService;
//
//	private static final String SSO_RETURN_URL="ssoReturnURL";
//	private static final String SSO_ST="ssost";
//	private static final String SSO_LOGIN_URL="ssoLoginURL";
//	private static final String SSO_LOGOUT_URL="ssoLogoutURL";
//
//	private static final String CHECKCODE_KEY=CacheConstant.SSO_SERVER+":checkCode";
//
//
//    @RequestMapping("login.action")
//    public String login(HttpServletRequest request,HttpServletResponse response) {
//    	HttpSession session= request.getSession();
//    	StringBuffer rto = new StringBuffer("redirect:");
//    	if(checkLogin(request)){
//    		Operater operater=(Operater)session.getAttribute(SystemConstant.SESSION_USER_KEY);
//
//    		//登录成功，删除之前锁定的编辑记录
//    		editLockService.loginUnlock(operater.getUserId(), FilterHelper.chekcVisitClient(request, response));
//
//    		//如果是新用户，或者没有密码，一律推送到index，待完善信息后，再跳转
//    		if(operater.getUserId()==-1 || SystemConstant.YES_STRING.equals(operater.getNoPwd())){
//    			rto.append("/ht/index.action");
//    			return rto.toString();
//    		}
//
//    		String returnURL=(String)session.getAttribute(SSO_RETURN_URL);
//    		session.removeAttribute(SSO_RETURN_URL);
//    		if(StringUtils.isNotBlank(returnURL)){
//    			rto.append(returnURL);
//	    	    return rto.toString();
//    		}else{
//    			rto.append("/ht/index.action");
//    			return rto.toString();
//    		}
//    	}
//
//    	//判断跳转次数，跳转次数过多，则停止服务
//    	Long loginCount=(Long)session.getAttribute(SystemConstant.SESSION_LOGIN_COUNT);
//    	if(loginCount==null){
//    		session.setAttribute(SystemConstant.SESSION_LOGIN_COUNT,1L);
//    	}else{
//    		if(loginCount>Long.valueOf(SystemProperty.getProperty("maxLoginCount"))){
//    			session.removeAttribute("loginCount");
//    			throw new RuntimeException("登录服务忙，请稍后再试");
//    		}
//    		session.setAttribute(SystemConstant.SESSION_LOGIN_COUNT,loginCount+1);
//    	}
//
//    	//将返回地址先暂存起来
//    	String returnURL=request.getParameter(SSO_RETURN_URL);
//		if(StringUtils.isNotBlank(returnURL)){
//			session.setAttribute(SSO_RETURN_URL, returnURL);
//		}
//
//		//跳转到SSOServer
//		String ssoLoginUrl=SystemProperty.getProperty(SSO_LOGIN_URL);
//
//    	rto.append(ssoLoginUrl).append("?").append(SSO_RETURN_URL).append("=");
//    	String url=request.getRequestURL().toString();
//    	try{
//    		rto.append(URLEncoder.encode(url,"UTF-8"));
//    	}catch(UnsupportedEncodingException ex){}
//		return rto.toString();
//    }
//
//
//    private boolean checkLogin(HttpServletRequest request){
//    	String ssost=request.getParameter(SSO_ST);
//    	if(StringUtils.isBlank(ssost)){
//    		return false;
//    	}
//    	String loginKey= redisCache.getString(ssost);
//    	redisCache.delete(ssost);
//    	if(StringUtils.isBlank(loginKey)){
//    		return false;
//    	}
//    	SSOToken ssoToken =redisCache.getObj(loginKey, SSOToken.class);
//    	if(ssoToken==null || StringUtils.isBlank(ssoToken.getIssuer())){
//    		return false;
//    	}
//
//    	Operater operater=new Operater();
//		operater.setIp(ssoToken.getIp());
//		operater.setBusinessCode(ssoToken.getId());
//		operater.setUserId(Long.valueOf(ssoToken.getIssuer()));
//		User user=null;
//		if(ssoToken.getData()!=null){
//			user= JSON.toJavaObject((JSONObject)ssoToken.getData(),User.class);
//			user=completeUser(user,operater);
//			//如果没有密码，设置标识，一定要设置密码
//			if(StringUtils.isBlank(user.getPwd())){
//				operater.setNoPwd(SystemConstant.YES_STRING);
//			}
//		}else{
//			user=userCenterProxy.getUser(operater.getUserId());
//		}
//
//		operater.setUserId(user.getId());
//		operater.setMobile(user.getMobile());
//		operater.setEmail(user.getEmail());
//		operater.setFullName(user.getFullName());
//		operater.setSex(user.getSex());
//		operater.setCertificationLevel(user.getCertificationLevel());
//    	operater.setIdcardType(user.getIdcardType());
//    	operater.setIdcardCode(user.getIdcardCode());
//    	operater.setUserType(user.getUserType());
//        userCenterProxy.setOperater(operater);
//        setCurrentOrg(operater);
//		setSession(request.getSession(), operater,loginKey);
//		return true;
//    }
//
//    //完善用户信息
//    private User completeUser(User user,Operater operater){
//    	User old=null;
//    	if("ixm".equals(user.getNote())){
//    		old=userCenterProxy.getUserByIdcard(user.getIdcardCode());
//    		operater.setNote("ixm");
//    	}
//    	if("sms".equals(user.getNote())){
//    		old=userCenterProxy.getUserByMobile(user.getMobile());
//    		operater.setNote("sms");
//    	}
//
//    	//如果是新用户
//    	if(old==null || old.getId()==null || old.getId()==0){
//    		return user;
//    	}
//    	return old;
//    }
//
//    private void setCurrentOrg(Operater operater){
//  		//用户当前部门ID默认为主部门ID
//    	operater.setOrgType("business");
//    	//业务系统，orgId与bigOrgId是一样的
//      	operater.setOrgId(operater.getMasterOrganizationId());
//    	operater.setBigOrgId(operater.getMasterOrganizationId());
//      	Organization oao=userCenterProxy.getOrganization(operater.getOrgId());
//  		if(oao!=null && oao.getId()!=null && oao.getId()>0){
//  			operater.setUserDataCode(oao.getOrganizationCode());
//  			operater.setOrgName(oao.getOrganizationName());
//  			operater.setBigOrgName(oao.getOrganizationName());
//  		}
//  	}
//
//    private void setSession(HttpSession session,Operater operater,String loginKey){
//
//		//将用户的权限保存在会话中
//		List<Menu> menus=null;
//		try{
//			menus=rbacProxy.listMenu(operater.getUserId(), SystemProperty.getProperty("systemMenuFlag"),"1");
//		}catch(Exception ex){
//			logger.error(ex.getMessage(),ex);
//		}
//		if(menus!=null && !menus.isEmpty()){
//			Collections.sort(menus);
//			session.setAttribute(SystemConstant.SESSION_MENU_ALL,menus); //用户的全部权限
//
//			//将菜单整理后保存起来，便于首页展现
//			List<Menu> titles=new ArrayList<Menu>();
//			List<Menu> firsts=new ArrayList<Menu>();
//
//			for(Menu menu:menus){
//				 if(SystemConstant.NORMAL_STRING.equals(menu.getStatus()) &&
//						 SystemConstant.NORMAL_STRING.equals(menu.getDisplay()) &&
//						 SystemConstant.YES_STRING.equals(menu.getIfMenu()) &&
//						 menu.getParentId()==21
//						 ){
//					 titles.add(menu);
//					 for(int i=0;i<menus.size();i++){
//						 Menu first=menus.get(i);
//						 if(SystemConstant.NORMAL_STRING.equals(first.getStatus()) &&
//								 SystemConstant.NORMAL_STRING.equals(first.getDisplay()) &&
//								 SystemConstant.YES_STRING.equals(first.getIfMenu()) &&
//								 first.getParentId()==menu.getId()
//								 ){
//							 firsts.add(first);
//						 }
//					 }
//				 }
//			 }
//
//			 List<Menu> seconds=new ArrayList<Menu>();
//			 for(Menu menu:firsts){
//				 for(int i=0;i<menus.size();i++){
//					 Menu second=menus.get(i);
//					 if(SystemConstant.NORMAL_STRING.equals(second.getStatus()) &&
//							 SystemConstant.NORMAL_STRING.equals(second.getDisplay()) &&
//							 SystemConstant.YES_STRING.equals(second.getIfMenu()) &&
//							 second.getParentId()==menu.getId()
//							 ){
//						 seconds.add(second);
//						 if(menu.getChildren()==null){
//							 menu.setChildren(new ArrayList<Menu>() );
//						 }
//						 menu.getChildren().add(second);
//					 }
//				 }
//			 }
//
//			 for(Menu menu:seconds){
//				 for(int i=0;i<menus.size();i++){
//					 Menu three=menus.get(i);
//					 if(SystemConstant.NORMAL_STRING.equals(three.getStatus()) &&
//							 SystemConstant.NORMAL_STRING.equals(three.getDisplay()) &&
//							 SystemConstant.YES_STRING.equals(three.getIfMenu()) &&
//							 three.getParentId()==menu.getId()
//							 ){
//						 if(menu.getChildren()==null){
//							 menu.setChildren(new ArrayList<Menu>() );
//						 }
//						 menu.getChildren().add(three);
//					 }
//				 }
//			 }
//
//			 session.setAttribute(SystemConstant.SESSION_MENU_TITLES,titles); //标题菜单
//			 session.setAttribute(SystemConstant.SESSION_MENU_FIRSTS,firsts); //标题菜单的下一级菜单
//		}
//		//将登录用户的信息保存在会话中
//		session.setAttribute(SystemConstant.SESSION_USER_KEY, operater);  //用户信息
//		//将登录主键存储起来，便于刷新缓存
//		session.setAttribute(SystemConstant.SESSION_LOGIN_KEY, loginKey);
//		session.setAttribute(SystemConstant.SESSION_LOGIN_COUNT,0L);
//    }
//
//    private static final String checkCode_error="手机验证码错误";
//    @RequestMapping("/reLogin.action")
//    public @ResponseBody String reLogin(String mobile,String pwd,String email,
//    		String fullName,String idcardCode,
//    		String checkCode,
//    		HttpServletRequest request,HttpServletResponse response) {
//    	Operater operater=(Operater)request.getSession().getAttribute(SystemConstant.SESSION_USER_KEY);
// 	    if(operater==null || operater.getUserId()!=-1){
//     		return SystemConstant.FAIL_STRING;
//     	}
//
//    	//判断mobile是否重复
//    	if(StringUtils.isNotBlank(mobile)){
//    		mobile=mobile.trim();
//    		User old=userCenterProxy.getUserByMobile(mobile);
//    		if(old!=null && old.getId()!=null && old.getId()>0){
//    			return "手机号码已经被使用";
//    		}
//    	}else{
//    		return  "请输入手机号码";
//    	}
//
//	    if(!mobile.equals(operater.getMobile())){
//	    	 String str=(String)redisCache.getMapValue(CHECKCODE_KEY, mobile);
//	     	//检查手机验证码是否正确
//	     	if(StringUtils.isBlank(checkCode) || StringUtils.isBlank(str) || !str.substring(0,6).equals(checkCode.toUpperCase())){
//	 			 return checkCode_error;
//	 		}
//
//	 		if(System.currentTimeMillis()-Long.valueOf(str.substring(6))>SmsClient.getValidTime()*60*1000){
//	 			redisCache.deleteMapKey(CHECKCODE_KEY, mobile);
//	 			return "验证码已失效";
//	 		}
//	     	redisCache.deleteMapKey(CHECKCODE_KEY, mobile);
//    	}
//
//    	//判断email是否重复
//    	if(StringUtils.isNotBlank(email)){
//    		User old=userCenterProxy.getUserByEmail(email);
//    		if(old!=null && old.getId()!=null && old.getId()>0){
//    			return "email已经被使用，请退出，使用email+密码方式登录， 如忘记密码请使用忘记密码功能找回密码";
//    		}
//    	}
//
//    	User user=new User();
//    	user.setMobile(mobile);
//    	user.setPwd(pwd);
//    	user.setEmail(email);
//    	if(StringUtils.isBlank(operater.getIdcardCode())){
//	    	//判断身份证号码是否重复
//	    	if(StringUtils.isNotBlank(idcardCode)){
//	    		User old=userCenterProxy.getUserByIdcard(idcardCode);
//	    		if(old!=null && old.getId()!=null && old.getId()>0){
//	    			return "证件号码已经存在，请退出，使用证件+密码方式登录， 如忘记密码请使用忘记密码功能找回密码";
//	    		}
//	    		user.setIdcardCode(idcardCode);
//	    		user.setIdcardType("1");
//	    		char c='0';
//	    		if(idcardCode.length()==15){
//	    			c=idcardCode.charAt(14);
//	    		}else{
//	    			c=idcardCode.charAt(16);
//	    		}
//	    		int n=Integer.parseInt(String.valueOf(c));
//	    		if(n%2==0){
//	    			user.setSex("2");
//	    		}else{
//	    			user.setSex("1");
//	    		}
//	    	}else{
//	    		return "请输入证件号码";
//	    	}
//    	}else{
//    		user.setIdcardType(operater.getIdcardType());
//        	user.setIdcardCode(operater.getIdcardCode());
//        	user.setSex(operater.getSex());
//    	}
//
//    	if(StringUtils.isBlank(operater.getFullName())){
//	    	if(StringUtils.isNotBlank(fullName)){
//	    		user.setFullName(fullName);
//	    	}else{
//	    		return "请输入姓名";
//	    	}
//    	}else{
//    		user.setFullName(operater.getFullName());
//    	}
//
//    	user.setCertificationLevel(operater.getCertificationLevel());
//    	try{
//    		user=userCenterService.saveOrUpdateUser(user, operater);
//		}catch(BaseException ex1){
//			if(String.valueOf(ex1.getCode()).startsWith("1")){
//				return ex1.getMessage();
//			}else{
//				logger.error(ex1.getMessage(),ex1);
//				return SystemConstant.FAIL_STRING;
//			}
//		}catch(Exception ex2){
//			return SystemConstant.FAIL_STRING;
//		}
//    	operater.setUserId(user.getId());
//    	operater.setMobile(user.getMobile());
//    	operater.setEmail(user.getEmail());
//    	operater.setFullName(user.getFullName());
//    	operater.setIdcardCode(user.getIdcardCode());
//    	operater.setIdcardType(user.getIdcardType());
//    	operater.setSex(user.getSex());
//    	//将登录用户的信息保存在会话中
//    	request.getSession().setAttribute(SystemConstant.SESSION_USER_KEY, operater);  //用户信息
//    	return SystemConstant.SUCCESS_STRING;
//    }
//
//
//    @RequestMapping(value="/newUser.action")
//	public String newUser(Model model,HttpServletRequest request,HttpServletResponse response) {
//    	 Operater operater=(Operater)request.getSession().getAttribute(SystemConstant.SESSION_USER_KEY);
//    	 model.addAttribute("mobile",operater.getMobile());
//		 model.addAttribute("email",operater.getEmail());
//		 model.addAttribute("note",operater.getNote());
//		 if(StringUtils.isBlank(operater.getIdcardCode())){ //不是ixm过来的，需要设置证件信息
//             model.addAttribute("needIdcard","1");
//         }
//         if(StringUtils.isBlank(operater.getFullName())){ //不是ixm过来的，需要设置证件信息
//             model.addAttribute("needFullName","1");
//         }
//		return "newUser";
//	}
//
//
//    @RequestMapping("/setPwd.action")
//    public @ResponseBody String setPwd(String pwd,HttpServletRequest request,HttpServletResponse response) {
//    	Operater operater=(Operater)request.getSession().getAttribute(SystemConstant.SESSION_USER_KEY);
//    	if(operater==null || operater.getUserId()==-1){
//    		return SystemConstant.FAIL_STRING;
//    	}
//    	Map<Long,String> params=new HashMap<Long,String>();
//    	params.put(operater.getUserId(), pwd);
//    	try{
//    		userCenterService.resetNewPasswordUsers(params, null, operater);
//    	}catch(BaseException ex1){
//			if(String.valueOf(ex1.getCode()).startsWith("1")){
//				return ex1.getMessage();
//			}else{
//				logger.error(ex1.getMessage(),ex1);
//				return SystemConstant.FAIL_STRING;
//			}
//		}catch(Exception ex2){
//			return SystemConstant.FAIL_STRING;
//		}
//    	operater.setNoPwd(null);
//    	return SystemConstant.SUCCESS_STRING;
//    }
//
//    @RequestMapping(value="/noPwd.action")
//	public String noPwd(Model model,HttpServletRequest request,HttpServletResponse response) {
//		return "noPwd";
//	}
//
//
//    @RequestMapping("logout.action")
//    public String logout(HttpServletRequest request,HttpServletResponse response) {
//    	request.getSession().removeAttribute(SystemConstant.SESSION_USER_KEY);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_LOGIN_KEY);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_LOGIN_COUNT);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_MENU_ALL);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_MENU_TITLES);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_MENU_FIRSTS);
//
//    	//删除之前锁定的编辑记录
//		editLockService.logoutUnlock(request.getSession().getId());
//
//    	String logoutUrl=SystemProperty.getProperty(SSO_LOGOUT_URL);
//    	StringBuffer sb=request.getRequestURL();
//    	String returnUrl=sb.substring(0,sb.length()-13)+"ht/index.action";
//    	logoutUrl=logoutUrl+"?returnUrl="+returnUrl;
//    	return "redirect:"+logoutUrl;
//    }
//
//
//    @RequestMapping("toIxm.action")
//    public String toIxm(HttpServletRequest request,HttpServletResponse response) {
//    	request.getSession().removeAttribute(SystemConstant.SESSION_USER_KEY);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_LOGIN_KEY);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_LOGIN_COUNT);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_MENU_ALL);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_MENU_TITLES);
//    	request.getSession().removeAttribute(SystemConstant.SESSION_MENU_FIRSTS);
//
//    	String logoutUrl=SystemProperty.getProperty(SSO_LOGOUT_URL);
//    	logoutUrl=logoutUrl+"?returnUrl=https://www.ixm.gov.cn/ids/custom/xiamen/login_xm.jsp";
//    	return "redirect:"+logoutUrl;
//    }
//
//}
